/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package invoiceon;

import com.arca.documento.electronico.webservice.recepcion.RecepcionComprobantes;
import com.arca.documento.electronico.webservice.recepcion.RespuestaSolicitud;
import com.arca.documento.electronico.webservice.envio.AutorizacionDocumentoWS;
import com.arca.documento.electronico.webservice.envio.EnvioDocumentoElectronicoWS;
import com.google.common.collect.Lists;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;

/**
 *
 * @author use12
 */
public class InvoiceOn {
    static final Logger logger = Logger.getLogger(InvoiceOn.class);
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        InvoiceOn.envioDocumentosElectronicos();
    }

    protected static final void envioDocumentosElectronicos() {
        try {
            RespuestaSolicitud solicitud = new RespuestaSolicitud();
            String autorizacion = null;

            List documentLists = Lists.newArrayList();
            // Archivos seleccionados para ser enviados.
            // archivosSeleccionados = listaSeleccionados();
            int k = 0;

            if (!documentLists.isEmpty()) {
                k = 1;
                for (Object o : documentLists) {
                    File f = (File)o;
                    try {
                        
                        //String claveAccesoComprobante = ArchivoUtils.obtenerValorXML(f, "/*/infoTributaria/claveAcceso");
                        //String tipoComprobante = ArchivoUtils.obtenerValorXML(f, "/*/infoTributaria/codDoc").substring(1);
                        String claveAccesoDocumento = null;
                        String tipoDocumento = null;
                        
                        if ((tipoDocumento != null) && (claveAccesoDocumento != null)) {
                            String ruc = null; // Ruc emisor - this.emisor.getRuc()
                            String ambiente = null; // ambiente prueba/produccion - this.emisor.getTipoAmbiente()
                            String urlWs = null; // forma el string de acceso al webservice - FormGenerales.devuelveUrlWs(ambiente, "RecepcionComprobantes") 
                            
                            solicitud = EnvioDocumentoElectronicoWS.obtenerRespuestaEnvio(f, ruc, tipoDocumento, 
                                    claveAccesoDocumento, urlWs);
                            int tiempoEspera = 1; //this.emisor.getTiempoEspera().intValue()
                            if (solicitud.getEstado().equals(EnvioDocumentoElectronicoWS.RECIBIDA)) {
                                Thread.currentThread();
                                Thread.sleep(tiempoEspera * 1000);
                                //autorizacion = AutorizacionComprobantesWs.autorizarComprobanteIndividual(claveAccesoDocumento, f.getName(), this.emisor.getTipoAmbiente());
                                //this.emisor.getTipoAmbiente()
                                autorizacion = AutorizacionDocumentoWS.autorizarDocumentoIndividual(claveAccesoDocumento, f.getName(), ambiente);

                                String estado = null;
                                String resultado = null;
                                if (autorizacion.lastIndexOf("|") != -1) {
                                    estado = autorizacion.substring(0, autorizacion.lastIndexOf("|"));
                                    resultado = autorizacion.substring(autorizacion.lastIndexOf("|") + 1, autorizacion.length());
                                } else {
                                    estado = autorizacion;
                                    resultado = "Procesado";
                                }

                                if (autorizacion.equals("AUTORIZADO")) {
                                    //JOptionPane.showMessageDialog(this, "El comprobante fue autorizado por el SRI", "Respuesta", 1);
                                    logger.debug("El comprobante fue autorizado por el SRI");
                                } else {
                                    //JOptionPane.showMessageDialog(this, "El comprobante fue guardado, firmado y enviado exitósamente, pero no fue Autorizado\n" + estado + "\n" + resultado, "Respuesta", 1);
                                    logger.debug("El comprobante fue guardado, firmado y enviado exitósamente, pero no fue Autorizado");
                                }

                                //this.modelResultado.addRow(Integer.valueOf(k), f.getName(), FormGenerales.obtieneTipoDeComprobante(claveAccesoDocumento), estado, FormGenerales.insertarCaracteres(resultado, "\n", 160));

                                f.delete();
                            //} else if (solicitud.getEstado().equals("DEVUELTA")) {//
                            } else if (solicitud.getEstado().equals(EnvioDocumentoElectronicoWS.DEVUELTA)) {//
                                /* ***
                                String resultado = FormGenerales.insertarCaracteres(EnvioComprobantesWs.obtenerMensajeRespuesta(solicitud), "\n", 160);

                                this.modelResultado.addRow(Integer.valueOf(k), f.getName(), FormGenerales.obtieneTipoDeComprobante(claveAccesoDocumento), solicitud.getEstado(), FormGenerales.insertarCaracteres(resultado, "\n", 160));

                                String dirFirmados = new ConfiguracionDirectorioSQL().obtenerDirectorio(DirectorioEnum.FIRMADOS.getCode()).getPath();
                                String dirRechazados = dirFirmados + File.separator + "rechazados";

                                ArchivoUtils.anadirMotivosRechazo(f, solicitud);
                                
                                String directorioRechazado = null;
                                File rechazados = new File(directorioRechazado);
                                if (!rechazados.exists()) {
                                    new File(directorioRechazado).mkdir();
                                }

                                if (!ArchivoUtils.copiarArchivo(f, rechazados.getPath() + File.separator + f.getName())) {
                                    JOptionPane.showMessageDialog(new JFrame(), "Error al mover archivo a carpeta rechazados", "Respuesta", 1);
                                } else {
                                    f.delete();
                                }
                                JOptionPane.showMessageDialog(new JFrame(), "Error al tratar de enviar el comprobante hacia el SRI:\n" + resultado, "Se ha producido un error ", 0);
                                * *** */
                            }
                            k++;
                        } else {
                            String m = "\n En: " + f.getName() + " la información <codDoc> y <claveAcceso> son obligatorias para el envio del archivo";
                            logger.debug("Error al tratar de enviar el comprobante hacia el SRI:\\n" + m);
                            //JOptionPane.showMessageDialog(new JFrame(), "Error al tratar de enviar el comprobante hacia el SRI:\n" + m, "Se ha producido un error ", 0);
                        }
                    } catch (Exception ex) {
                        logger.error(ex, ex);
                    }
                }
            }
        } finally {
//            RespuestaSolicitud respuestaRecepcion;
//            String respuestaAutoriz;
//            int i;
//            setCursor(Cursor.getDefaultCursor());
//            this.btnEnvioIndividual.setEnabled(true);
//            mostrarArchivos();
        }
    }
}
